package ar.uade.fain.ai.tpo.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Set;

import ar.uade.fain.ai.tpo.model.Proveedor;

public class ProveedorDAO extends CacheDAOSupport<Proveedor>{
	
	private static final String SELECT_PROVEEDOR = 
			"select * from delivery.dbo.proveedor where idproveedor = ?";

	public ProveedorDAO() {
		super();
	}
	
	public Proveedor buscarPorId(final Long idProveedor){
		if (idProveedor == null) return null;
		Set<Proveedor> cacheados = buscarEnCache(new Selector<Proveedor>() {
			@Override
			public boolean aceptar(Proveedor entidad) {
				return entidad.getId().equals(idProveedor);
			}
		});
		if (cacheados.isEmpty()) {
			return load(idProveedor);
		} else {
			return cacheados.iterator().next();
		}
	}

	private Proveedor load(final Long idProveedor) {
		final List<Proveedor> enBase = database().select(
				SELECT_PROVEEDOR, 
				idProveedor, new RowMapper<Proveedor>() {
			@Override
			public Proveedor map(ResultSet rs) throws SQLException {
				Proveedor proveedor = new Proveedor(
						rs.getLong("idproveedor"), 
						rs.getString("nombre")); 
				return proveedor;
			}
		});
		if (enBase.isEmpty()) {
			return null;
		} else {
			Proveedor element = enBase.iterator().next();
			agregarACache(element);
			return element;
		}
	}

}
